# 从Shape基类实现三角形、矩形、圆，求它们面积。对圆形的实例信息进行序列化
# import math

class Shape:
    '''定义Shape基类，要求所有子类都必须要使用 '''
    @property
    def areas(self):
        raise NotImplementedError('基类未实现')

class Triangle(Shape):
    '''定义三角形的底a和高h，计算其面积'''
    def __init__(self,a,h):
        self.a = a
        self.h = h

    @property
    def areas(self):
        p1 = (self.a * self.h) // 2
        return '您输入的三角型底为{}，高为{}，其面积计算得出为：{}'.format(self.a,self.h,p1)

class Rectangle(Shape):
    '''定义长方形的长和宽，计算其面积'''
    def __init__(self,height,width):
        self.height = height
        self.width = width

    @property
    def areas(self):
        p2 = self.height * self.width
        return '您输出长方形长为{}，宽为{}，其面积计算得出为：{}'.format(self.height,self.width,p2)

class Circle(Shape):
    '''定义圆形的半径，计算其面积'''
    def __init__(self,r):
        self.r = r

    @property
    def areas(self):
        p3 = 3.14 * (self.r ** 2)
        # return '您输出圆形半径为{}，其面积计算得出为：{}'.format(self.r,p3)
        return p3

#对圆形的实例信息进行序列化
import json

Cirs = Circle(5)
Cirs_area = Cirs.areas
print(Cirs_area)
d = {'area': Cirs_area}
print(d)
bianma = json.dumps(d) #Json编码
print('圆形面积的编码为{}'.format(bianma))

jiema = json.loads(bianma)
print('圆形面积的解码为{}'.format(jiema))


